home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / pcfig4th.zip / 4TH-LIB.MAC < prev    next >
Text File  |  1983-07-30  |  4KB  |  156 lines

  1. .XLIST    ;don't list as macros are loaded...
  2. ;======================================================================
  3. ;    FORTH.ASM macro support
  4. ;======================================================================
  5.  
  6. _LINK    = 0        ;;variable used to keep dictionary links
  7.  
  8. $FAIL    MACRO    MSG    ;;Force an assembler error
  9.     %OUT    ** &MSG
  10. FORCED ERROR:&MSG    ;;this will cause a syntax error, and print MSG
  11.     ENDM
  12.  
  13. ;=======================================================================
  14. ;    $NAME    compile a Fig-FORTH name field
  15. ;=======================================================================
  16.  
  17. $NAME    MACRO    LBYTE, NAME, LASTCH
  18.  
  19.     _NFA    = $
  20.  
  21.     DB    LBYTE        ;;length
  22.     IFNB    <NAME>
  23.     DB    '&NAME'        ;;first part of name, except last char
  24.     ENDIF
  25.     DB    '&LASTCH'+80H    ;;last char has high bit set
  26.     ENDM
  27.  
  28. ;=======================================================================
  29. ;    $LINKS    compile LFA, set _LINK to the NFA just set up by $NAME
  30. ;=======================================================================
  31.  
  32. $LINKS    MACRO    CFA, LABEL
  33.  
  34.     IF    _ALIGN        ;;align LFA if _ALIGN is TRUE
  35.     EVEN
  36.     ENDIF
  37.  
  38.     DW    _LINK        ;;LFA
  39.     _LINK    = _NFA        ;;will become next LFA in list
  40.  
  41.     IFNB    <LABEL>
  42. LABEL:                ;;label to be used in definitions
  43.     ENDIF
  44.     DW    CFA
  45.  
  46.     ENDM
  47.  
  48. ;=======================================================================
  49. ;    $CODE    compile a code definition header
  50. ;=======================================================================
  51.  
  52. $CODE    MACRO    ONE, TWO, THREE, FOUR
  53.  
  54.     $NAME    ONE, TWO, THREE
  55.     $LINKS    $+2, FOUR    ;;CFA points to next address
  56.     ENDM
  57.  
  58. ;=======================================================================
  59. ;    $COLON    compile a colon definition header
  60. ;=======================================================================
  61.  
  62. $COLON    MACRO    ONE, TWO, THREE, FOUR
  63.  
  64.     $NAME    ONE, TWO, THREE
  65.     $LINKS    DOCOL, FOUR
  66.     ENDM
  67.  
  68. ;=======================================================================
  69. ;    $CONST    compile a constant header
  70. ;=======================================================================
  71.  
  72. $CONST    MACRO    ONE, TWO, THREE, FOUR
  73.  
  74.     $NAME    ONE, TWO, THREE
  75.     $LINKS    DOCON, FOUR
  76.     ENDM
  77.  
  78. ;=======================================================================
  79. ;    $VAR    compile a variable header
  80. ;=======================================================================
  81.  
  82. $VAR    MACRO    ONE, TWO, THREE, FOUR
  83.  
  84.     $NAME    ONE, TWO, THREE
  85.     $LINKS    DOVAR, FOUR
  86.     ENDM
  87.  
  88. ;=======================================================================
  89. ;    $USER    compile a user variable header
  90. ;=======================================================================
  91.  
  92. $USER    MACRO    ONE, TWO, THREE, FOUR
  93.  
  94.     $NAME    ONE, TWO, THREE
  95.     $LINKS    DOUSE, FOUR
  96.     ENDM
  97.  
  98. ;=======================================================================
  99. ;    $DOES    compile a header for word defined by DOES>
  100. ;=======================================================================
  101.  
  102. $DOES    MACRO    ONE, TWO, THREE, FOUR
  103.  
  104.     $NAME    ONE, TWO, THREE
  105.     $LINKS    DODOE, FOUR
  106.     ENDM
  107.  
  108. ;=======================================================================
  109. ;    $GOTO    compile an absolute branch
  110. ;=======================================================================
  111.  
  112. $GOTO    MACRO    LABEL
  113.  
  114.     DW    BRAN
  115.     DW    OFFSET LABEL-$
  116.     ENDM
  117.  
  118. ;=======================================================================
  119. ;    $GO?0    compile a relative branch
  120. ;=======================================================================
  121.  
  122. $GO?0    MACRO    LABEL
  123.  
  124.     DW    ZBRAN
  125.     DW    OFFSET LABEL-$
  126.     ENDM
  127.  
  128. ;=======================================================================
  129. ;    $LOOP    compile a loop
  130. ;=======================================================================
  131.  
  132. $LOOP    MACRO    LABEL
  133.  
  134.     DW    XLOOP
  135.     DW    OFFSET LABEL-$
  136.     ENDM
  137.  
  138. ;=======================================================================
  139. ;    $REPORT    print a message if _REPORT is TRUE
  140. ;=======================================================================
  141.  
  142. $REPORT    MACRO    MESSAGE,VALUE
  143.  
  144.     IF    _REPORT
  145.     IF2
  146.     IFNB    <VALUE>
  147.     %OUT    MESSAGE&VALUE
  148.     ELSE
  149.     %OUT    MESSAGE
  150.     ENDIF
  151.     ENDIF
  152.     ENDIF
  153.     ENDM
  154.  
  155. .LIST        ;;start listing again
  156.